home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 13, No. 02 (1992-02)(MindCraft Publishing)(Side A).zip
/
Nibble Volume 13, No. 02 (1992-02)(MindCraft Publishing)(Side A).po
/
SPEED.SEARCH.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
4KB
|
129 lines
* SPEED SEARCH
* by C.B. Winkler
*
* Copyright (C) 1992 by
* MindCraft Publishing Corp.
*
* MERLIN PRO ASSEMBLER
*
* A PROGRAM TO FIND A SPECIFIED STRING
* WITHIN A STRING ARRAY
*
*
AAEP EQU $06 ;ADDRESS OF APPLESOFT ELEMENT POINTER
EP EQU $F9 ;DATA ELEMENT POINTER
WP EQU $FB ;WORD POINTER
RP EQU $FD ;RETURN ELEMENT POINTER
AAWP EQU WP ;ADDRESS OF APPLESOFT WORD POINTER
LW EQU $FF ;LENGTH OF WORD
NETC EQU $EB ;NO. OF ELEMENTS TO CHECK
NEC EQU $ED ;NO. OF ELEMENTS CHECKED
NC EQU $EF ;NO. OF TIMES TO CHECK THIS ELEMENT
AANETC EQU EP ;ADDRESS OF APPLESOFT NETC
COMMA EQU $DEBE ;APPLESOFT ROUTINE TO FIND COMMA
GETADD EQU $DFE3 ;APPLESOFT ROUTINE TO GET VARIABLE ADDRESS
DEND
*
ORG $300
*
* INITIALIZE
*
JSR GETADD ;GET AAWP
STA AAWP
STY AAWP+1
JSR COMMA ;CHECK FOR COMMA
JSR GETADD ;GET AAEP
STA AAEP
STY AAEP+1
JSR COMMA ;CHECK FOR COMMA
JSR GETADD ;GET RP
STA RP
STY RP+1
JSR COMMA ;CHECK FOR COMMA
JSR GETADD ;GET AANETC
STA AANETC
STY AANETC+1
LDY #$00 ;Y=0
LDA (AAWP),Y ;GET LW
STA LW
STY NEC ;INITIALIZE NEC
STY NEC+1 ;TO ZERO
LDA (AANETC),Y ;MOVE NETC TO
STA NETC ;ZERO PAGE
INY ;Y=1
LDA (AANETC),Y
STA NETC+1
LDA (AAWP),Y ;GET WP
PHA ;LOW BYTE ON STACK
INY ;Y=2
LDA (AAWP),Y
STA WP+1 ;HI BYTE TO ZERO PAGE
PLA ;LOW BYTE FROM STACK
STA WP ;AND TO ZERO PAGE
*
* INITIALIZATION DONE
*
INCNEC INC NEC+1 ;INCREMENT NO. OF ELEMENTS CHECKED
BNE GETLE
INC NEC
GETLE LDY #$00 ;Y=0
LDA (AAEP),Y ;GET LENGTH OF ELEMENT
SEC
SBC LW ;A=LE-LW
BCC CHECKDONE ;BRANCH IF WORD TOO LONG
STA NC
INC NC ;NC=LE-LW+1
INY ;Y=1
LDA (AAEP),Y ;INITIALIZE EP
STA EP
INY ;Y=2
LDA (AAEP),Y
STA EP+1
GO LDY #$00 ;Y=0, START ELEMENT CHECKING ROUTINE
CHECK LDA (WP),Y ;DOES CHARACTER OF WORD
CMP (EP),Y ;MATCH CHARACTER OF ELEMENT
BEQ INCY ;BRANCH IF YES
DEC NC ;IF NO, DEC NC
BNE INCEP ;BRANCH IF NOT DONE THIS ELEMENT
CHECKDONE LDA NEC ;DOES NEC=NETC
CMP NETC
BNE CONT ;BRANCH IF NO
LDA NEC+1
CMP NETC+1
BNE CONT
LDA #$FF ;ALL DONE CHECKING
LDY #$00 ;A=FF,Y=0
STA (RP),Y ;STORE -1(FF FF) IN RETURN ELEMENT
INY
STA (RP),Y
RTS ;AND RETURN
CONT CLC ;INC AAEP TO NEXT ELEMENT
LDA AAEP ;BY ADDING 3
ADC #$03
STA AAEP
LDA AAEP+1
ADC #$00
STA AAEP+1
BNE INCNEC ;UNCONDITIONAL BRANCH
INCY INY ;Y=Y+1
CPY LW ;Y=LW?
BNE CHECK ;BRANCH AND CONTINUE CHECKING IF NO
LDY #$00 ;IF YES, THERE IS A MATCH
LDA NEC ;STORE NEC AT RP
STA (RP),Y
INY
LDA NEC+1
STA (RP),Y
CLC ;INC RP TO NEXT ELEMENT
LDA RP ;BY ADDING 2
ADC #$02
STA RP
LDA RP+1
ADC #$00
STA RP+1
BNE CHECKDONE ;UNCONDITIONAL BRANCH
INCEP INC EP ;INC EP
BNE GO
INC EP+1
BNE GO ;UNCONDITIONAL BRANCH